package com.aiwiown.face.domain;

import com.aiwiown.face.ApiObject;
import com.aiwiown.face.domain.params.ApiParamType;
import com.aiwiown.face.domain.params.ComparisonType;
import com.aiwiown.face.domain.params.LivenessPreferences;
import com.aiwiown.face.domain.params.MultiOrientedDetection;
import com.aiwiown.face.internal.mapping.ApiField;

import java.io.File;

/**
 * <pre>
 * </pre>
 * RawVerifyModel
 * Date: 2020/5/12 0012
 * Time: 14:37
 *
 * @author tang.xiaosheng@qq.com
 */
public class RawVerifyModel extends ApiObject {
    private static final long serialVersionUID = 9090681582797045314L;

    /**
     * 调用Raw-GetRandomNumber API返回的token_random_number。
     * <p>
     * 注意：Token有效期为24小时
     */
    @ApiField("token")
    private String token;

    /**
     * 用于标志一次验证流程，不超过128字符。
     * 如果要使用此参数，强烈建议对一次验证流程中调用的API（比如Raw-GetRandomNumber、Raw-ValidateVideo、Raw-Verify）使用同一个biz_no，
     * 对不同的验证流程使用不同的biz_no。
     */
    @ApiField("biz_no")
    private String bizNo;

    /**
     * 设定本次KYC服务的类型，目前支持的比对类型为“KYC验证”（取值“1”）或“人脸比对”（取值“0”）。传递其他值调用将识别，返回错误码400（BAD_ARGUMENTS）。
     * <p>
     * “1”表示KYC验证，表示将与参考照片比对，同时也可以与自己提供的照片（参数image_ref[x]）比对；请注意：如果appkey没有KYC验证的权限，设置此值将返回错误码 403（AUTHORIZATION_ERROR:Denied）；
     * “0”表示人脸比对，表示将与自己提供的照片（参数image_ref[x]）比对。请注意：如果appkey没有人脸比对的权限，设置此值将返回错误码 403（AUTHORIZATION_ERROR:Denied）。
     */
    @ApiField(value = "comparison_type", paramType = ApiParamType.ENUM)
    private ComparisonType comparisonType;

    /**
     * 本参数可选，表示一系列可以放松或加强活体检测的特别的选项。
     * <p>
     * 目前可用的选项有：
     * <p>
     * “none”：表示没有特别的选项，此为默认值。
     * "selfie_no_metadata_check"：（仅双自拍验证流程时生效）表示不限定照片格式为JPG、也不校验照片的元信息。
     * "video_strict"：（仅当使用视频验证时有效）表示针对上传的视频进行相对严格的活体检测，此设置会提高安全性，但在一定程度上影响通过率。
     * 设置其他值，均会返回400（BAD_ARGUMENTS）。
     */
    @ApiField(value = "liveness_preferences", paramType = ApiParamType.ENUM)
    private LivenessPreferences livenessPreferences;

    /**
     * 需要核实对象的姓名，使用UTF-8编码。。
     */
    @ApiField("idcard_name")
    private String idCardName;

    /**
     * 需要核实对象的证件号码，也就是一个18位长度的字符串。
     */
    @ApiField("idcard_number")
    private String idCardNumber;

    /**
     * 多张由您提供的参照人脸照片。
     * x表示此参数可重复多次，其中1 <= x <= 3，即表示可以传最多二张参照人脸照片（参数分别为image_ref1、image_ref2、image_ref3）。
     * 如果在image_ref[x]中的任一张图片里没有找到人脸，将返回错误码400（NO_FACE_FOUND)；
     * 如果这些图片中任一张中有多张脸，将返回错误码400（MULTIPLE_FACES）。
     */
    @ApiField(value = "image_ref1", paramType = ApiParamType.FILE)
    private File imageRef1;
    @ApiField(value = "image_ref2", paramType = ApiParamType.FILE)
    private File imageRef2;
    @ApiField(value = "image_ref3", paramType = ApiParamType.FILE)
    private File imageRef3;

    /**
     * 如果用户不使用参考数据进行比对，则上传此字段，用于标志本次识别对应的用户的唯一ID，要求不长于512字节。
     * <p>
     * 建议您对来自同一用户的比对请求使用同样的ID，这非常有利于您反查验证结果以及获得更好的监控报表体验。
     */
    @ApiField("uuid")
    private String uuid;

    /**
     * 决定对于image_ref[x]参数对应的图片，当检测不出人脸时，是否旋转90度、180度、270度后再检测人脸。本参数取值只能是 “1” 或 "0" （缺省值为“0”）:
     * <p>
     * “1”：要旋转检测；
     * <p>
     * “0”：不旋转；
     * <p>
     * 其他值：返回错误码400（BAD_ARGUMENTS）
     * <p>
     * 请注意：设置此参数为1可能会轻微增加误检人脸的概率，如果您明确您的业务场景里不存在非正向的人脸图片、或概率极低，建议勿设置此参数。
     */
    @ApiField(value = "multi_oriented_detection", paramType = ApiParamType.ENUM)
    private MultiOrientedDetection multiOrientedDetection;

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public String getBizNo() {
        return bizNo;
    }

    public void setBizNo(String bizNo) {
        this.bizNo = bizNo;
    }

    public ComparisonType getComparisonType() {
        return comparisonType;
    }

    public void setComparisonType(ComparisonType comparisonType) {
        this.comparisonType = comparisonType;
    }

    public LivenessPreferences getLivenessPreferences() {
        return livenessPreferences;
    }

    public void setLivenessPreferences(LivenessPreferences livenessPreferences) {
        this.livenessPreferences = livenessPreferences;
    }

    public String getIdCardName() {
        return idCardName;
    }

    public void setIdCardName(String idCardName) {
        this.idCardName = idCardName;
    }

    public String getIdCardNumber() {
        return idCardNumber;
    }

    public void setIdCardNumber(String idCardNumber) {
        this.idCardNumber = idCardNumber;
    }

    public File getImageRef1() {
        return imageRef1;
    }

    public void setImageRef1(File imageRef1) {
        this.imageRef1 = imageRef1;
    }

    public File getImageRef2() {
        return imageRef2;
    }

    public void setImageRef2(File imageRef2) {
        this.imageRef2 = imageRef2;
    }

    public File getImageRef3() {
        return imageRef3;
    }

    public void setImageRef3(File imageRef3) {
        this.imageRef3 = imageRef3;
    }

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public MultiOrientedDetection getMultiOrientedDetection() {
        return multiOrientedDetection;
    }

    public void setMultiOrientedDetection(MultiOrientedDetection multiOrientedDetection) {
        this.multiOrientedDetection = multiOrientedDetection;
    }
}
